package Demo;

public class T2 {
//    单例模式---懒汉式(延迟加载模式)
    public static void main(String[] args) {

    }
}
class Single2{
    private Single2(){}
    private static Single2 s;//调用方法时 再实例化对象
    public static Single2 getInstance(){
//        双检索
        if (s == null) {
            synchronized (Single2.class){
    //            加锁之后就会保证多线程并发时 不会创建出多个对象
                if (s == null){
                    s = new Single2();
                }
            }
        }
        return s;
    }
}
/*
* class Single2{
    private Single2(){}
    private static Single2 s;//调用方法时 再实例化对象
    public static Single2 getInstance(){
        if (s == null){
            s = new Single2();
        }
        return s;
    }
    弊端: 多线程并发操作时候 可能创建出多个对象
    */

/*class Single2{
    private Single2(){}
    private static Single2 s;//调用方法时 再实例化对象
    public static Single2 getInstance(){
        synchronized (Single2.class){
//            加锁之后就会保证多线程并发时 不会创建出多个对象
            if (s == null){
                s = new Single2();
            }
        }
        return s;
    }
}
    弊端 : 效率低   因为上锁后 会造成线程堵塞的情况
    */
